Micron Document
πŸŽ–οΈGitΠ―Ρ€Π°πŸŽ–οΈ

Node / meshtastic / Meshtastic-Android / files / docs / en / developer / navigation-and-deep-links.md

Displaying Rendered β€’ View raw β€’ Download

docs/en/developer/navigation-and-deep-links.md bf929c20f274232e0eb8ddc19b2dc82403e99e5b (bf929c20) Text, 5.85 KB

title: Navigation & Deep Links
parent: Developer Guide
nav_order: 4
last_updated: 2026-07-01
aliases:
β€’ deeplinks
β€’ navigation-3
β€’ routes

Navigation & Deep Links

The app uses Navigation 3 with typed, serializable routes and centralized deep link resolution.

Route Architecture

All routes are defined in T383838core/navigation/src/commonMain/kotlin/org/meshtastic/core/navigation/Routes.kt.

Route Hierarchy

T282828
Tff7b72interface T56d364Route Tb4b4b4: Te6edf3NavKey T8b949e// All routes implement NavKey
Tff7b72interface T56d364Graph Tb4b4b4: Te6edf3Route T8b949e// Graph roots for navigation hierarchies

Tf0883e@Serializable
Tff7b72sealed Tff7b72interface T56d364SettingsRoute Tb4b4b4: Te6edf3Route Tb4b4b4{
Tf0883e@Serializable Tff7b72data Tff7b72class T56d364SettingsTb4b4b4(Tff7b72val Te6edf3destNumTb4b4b4: Tffa657Int? Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4: Te6edf3SettingsRouteTb4b4b4, Te6edf3Graph
Tf0883e@Serializable Tff7b72data Tff7b72object T56d364DeviceConfiguration Tb4b4b4: Te6edf3SettingsRoute
Tf0883e@Serializable Tff7b72data Tff7b72object T56d364HelpDocs Tb4b4b4: Te6edf3SettingsRoute
Tf0883e@Serializable Tff7b72data Tff7b72class T56d364HelpDocPageTb4b4b4(Tff7b72val Te6edf3pageIdTb4b4b4: Tffa657StringTb4b4b4) Tb4b4b4: Te6edf3SettingsRoute
T8b949e// ...
Tb4b4b4}


Conventions

β€’ Routes are T383838@Serializable for state restoration
β€’ Use T383838data object for routes without parameters
β€’ Use T383838data class for parameterized routes
β€’ Group related routes under a T383838sealed interface
β€’ Graph entry points implement both the route interface and T383838Graph

Deep Link Router

T383838DeepLinkRouter in T383838core/navigation maps URI deep links to typed backstack lists.

URI Format

Both forms resolve through the same T383838DeepLinkRouter, so any path below works with either scheme:

T282828
meshtastic://meshtastic/{path}
https://meshtastic.org/{path} # App Link, android:autoVerify β€” also opens in-app on a real device/adb

T383838adb shell am start -a android.intent.action.VIEW -d "meshtastic://meshtastic/{path}" is the fastest way to
trigger any route below from a shell or automation script without touching the UI.

Source of truth: the exhaustive, always-current list of segments lives as KDoc on
and as executable spec in
The table below is a snapshot for quick reference β€” check those two files if it looks out of date.

Supported Deep Links

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”
β”‚ URI Path β”‚ Route β”‚ No… β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€
β”‚ T383838/connections β”‚ T383838ConnectionsRoute.Connections(null) β”‚ Co… β”‚
β”‚ T383838/connections?address={prefixedAddress} β”‚ T383838ConnectionsRoute.Connections(address) β”‚ Au… β”‚
β”‚ T383838/connections?address=n β”‚ T383838ConnectionsRoute.Connections("n") β”‚ Di… β”‚
β”‚ T383838/wifi-provision β”‚ T383838WifiProvisionRoute.WifiProvision(null) β”‚ Wi… β”‚
β”‚ T383838/wifi-provision?address={mac} β”‚ T383838WifiProvisionRoute.WifiProvision(mac) β”‚ Pr… β”‚
β”‚ T383838/settings β”‚ T383838SettingsRoute.Settings(null) β”‚ Se… β”‚
β”‚ T383838/settings/helpDocs β”‚ T383838SettingsRoute.HelpDocs β”‚ Do… β”‚
β”‚ T383838/settings/helpDocs/{pageId} β”‚ T383838SettingsRoute.HelpDocPage(pageId) β”‚ Sp… β”‚
β”‚ T383838/settings/help-docs β”‚ T383838SettingsRoute.HelpDocs β”‚ Co… β”‚
β”‚ T383838/settings/local-mesh-discovery/session/{ses… β”‚ T383838DiscoveryRoute.DiscoverySummary(sessionId) β”‚ Di… β”‚
β”‚ T383838/nodes β”‚ T383838NodesRoute.Nodes β”‚ No… β”‚
β”‚ T383838/nodes/{destNum} β”‚ T383838NodesRoute.NodeDetail(destNum) β”‚ No… β”‚
β”‚ T383838/nodes/{destNum}/{metric} β”‚ e.g. T383838NodeDetailRoute.DeviceMetrics(destNum) β”‚ Sp… β”‚
β”‚ T383838/messages β”‚ T383838ContactsRoute.Contacts β”‚ Co… β”‚
β”‚ T383838/messages/{contactKey} β”‚ T383838ContactsRoute.Messages(contactKey) β”‚ Sp… β”‚
β”‚ T383838/share?message={text} β”‚ T383838ContactsRoute.Share(message) β”‚ Sh… β”‚
β”‚ T383838/quickchat β”‚ T383838ContactsRoute.QuickChat β”‚ Qu… β”‚
β”‚ T383838/map β”‚ T383838MapRoute.Map(null) β”‚ Ma… β”‚
β”‚ T383838/map/{waypointId} β”‚ T383838MapRoute.Map(waypointId) β”‚ Ma… β”‚
β”‚ T383838/channels β”‚ T383838ChannelsRoute.Channels β”‚ Ch… β”‚
β”‚ T383838/firmware β”‚ T383838FirmwareRoute.FirmwareGraph β”‚ Fi… β”‚
β”‚ T383838/firmware/update β”‚ T383838FirmwareRoute.FirmwareUpdate β”‚ Fi… β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜

Backstack Synthesis

Deep links synthesize a full backstack, not just the target screen:

T282828
T8b949e// /settings/helpDocs/messages-and-channels produces:
Te6edf3listOfTb4b4b4(
Te6edf3SettingsRouteTb4b4b4.Te6edf3SettingsTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4,
Te6edf3SettingsRouteTb4b4b4.Te6edf3HelpDocsTb4b4b4,
Te6edf3SettingsRouteTb4b4b4.Te6edf3HelpDocPageTb4b4b4(Ta5d6ff"Ta5d6ffmessages-and-channelsTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)


This ensures the user can navigate "up" correctly.

Adding a Deep Link

1. Define the typed route in T383838Routes.kt.
2. Add the mapping in T383838DeepLinkRouter.settingsSubRoutes (or equivalent for other graphs).
3. Add a test in T383838DeepLinkRouterTest.kt.
4. Register the navigation entry in the appropriate feature module.
5. Update the KDoc list on T383838DeepLinkRouter.route() and the table above β€” they're the two places tooling/agents look to discover what deep links exist.

Navigation Entry Registration

Each feature module provides entries via an extension function:

T282828
Tff7b72fun Td2a8ffEntryProviderScopeTff7b72<Te6edf3NavKeyTff7b72>Tb4b4b4.Te6edf3docsEntriesTb4b4b4(Te6edf3backStackTb4b4b4: Te6edf3NavBackStackTff7b72<Te6edf3NavKeyTff7b72>Tb4b4b4) Tb4b4b4{
Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3HelpDocsTff7b72> Tb4b4b4{ Te6edf3DocsBrowserScreenTb4b4b4(Te6edf3backStackTb4b4b4) Tb4b4b4}
Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3HelpDocPageTff7b72> Tb4b4b4{ Te6edf3route Tff7b72-Tff7b72> Te6edf3DocsPageRouteScreenTb4b4b4(Te6edf3routeTb4b4b4.Te6edf3pageIdTb4b4b4, Te6edf3backStackTb4b4b4) Tb4b4b4}
Tb4b4b4}


These are called from the settings navigation composition.

Testing

Deep link routing is tested in:
T282828
core/navigation/src/commonTest/kotlin/org/meshtastic/core/navigation/DeepLinkRouterTest.kt


Served by rngit 1.5.0 - Generated in 0.09s